#include "mainwindow.h"
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
#include <QFileDialog>      // 文件对话框


/***
 *  模态对话框: 在其没有被关闭之前, 用户不能与同一个应用程序的其他窗口进行交互, 直到该对话框关闭.
 *
 *
 *  非模态对话框: 在其打开后, 用户既可以与该对话框进行交互又可以与同应用程序的其它窗口交互
 *
 **/

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(400, 300);
    QMenuBar *mBar = new QMenuBar();
    setMenuBar(mBar);
    QMenu *menu = mBar->addMenu("对话框");
    QAction *p1 = menu->addAction("模态对话框");
    QAction *p2 = menu->addAction("非模态对话框");


    // 模态对话框
    connect(p1, &QAction::triggered,
            [=]()
                {
                    QDialog dia1;
                    dia1.exec();        // 阻塞
                    qDebug() << "模态对话框";
                }

    );

    connect(p2, &QAction::triggered,
            [=]() {
//                QDialog dia2;
//                dia2.show();        // 不阻塞, 运行完窗口就关闭
//                qDebug() << "非模态对话框";

//                this->dia.show();
//                qDebug() << "成员变量::非模态对话框";

//                QDialog *dia3 = new QDialog(this);
//                dia3->show();

                  QDialog *dia4 = new QDialog;
                  dia4->setAttribute(Qt::WA_DeleteOnClose);     // 设置属性:关闭时释放内存
                  dia4->show();
            }
            );
    // 关于对话框
    QAction *p3 = menu->addAction("关于对话框");
    connect(p3, &QAction::triggered,
            [=]() {
                QMessageBox::about(this, "about", "关于Qt");
            }
            );

    // 问题对话框
    QAction *p4 = menu->addAction("问题对话框");
    connect(p4, &QAction::triggered,
            [=]() {
                int res = QMessageBox::question(this, "question", "Are You OK",
                                                QMessageBox::Ok,
                                                QMessageBox::Cancel,
                                                QMessageBox::Open); // 按钮
                switch (res) {
                case QMessageBox::Ok:
                    qDebug() << "I am OK";
                    break;
                case QMessageBox::Cancel:
                    qDebug() << "I am cancel";
                    break;
                case QMessageBox::Open:
                    qDebug("I am Open");
                    break;
                default:
                    break;
                }
            }
            );

    // 文件对话框
    QAction *p5 = menu->addAction("文件对话框");
    connect(p5, &QAction::triggered,
            [=]() {
                // 获取文件的全路径
                QString filePath = QFileDialog::getOpenFileName(this, "open", "../",
                                             "Images(*.png *.jpg *.gif);;"
                                             "Text(*.txt);;"
                                             "Source(*.java *.py *.go);;"
                                             "all(*.*)");

                // 同一类型不同格式的文件之间以空格作为分隔
                // 不同类型的文件之间以;; 作为分隔

                qDebug() << "文件路径: " << filePath;
            }

            );
    //


}

MainWindow::~MainWindow()
{

}
